package main

import (
	"database/sql"
	"fmt"
	"go-mysql/dao"
	"go-mysql/global"
	// 执行driver.go文件中的init(),向"database/sql"注册一个mysql的驱动
	_ "github.com/go-sql-driver/mysql"
)

var (
	//定义数据库连接的相关参数值
	//连接数据库的用户名
	userName = "root"
	//连接数据库的密码
	password = "Qq123123"
	//连接数据库的地址
	ipAddress = "127.0.0.1"
	//连接数据库的端口号
	port = 3306
	//连接数据库的具体数据库名称
	dbName = "test"
	//连接数据库的编码格式
	charset = "utf8"
)

func main() {
	err := initDB()
	if err != nil {
		fmt.Println("初始化数据库失败,err", err)
		return
	}

	dao.BatchInsert()

	//需要修改的数据库对应记录的user结构体
	user := dao.User{ID: 1, Name: "蜡笔小新", Age: 18}
	dao.UpdateById(user)

	dao.QueryById(1)
	dao.QueryRows()
}

func initDB() (err error) {
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", userName, password, ipAddress, port, dbName, charset)
	//不会校验用户名和密码是否正确，只会对dsn的格式进行检测
	global.DB, err = sql.Open("mysql", dsn)
	if err != nil {
		return err
	}
	//尝试与数据库连接，校验dsn是否正确
	err = global.DB.Ping()
	if err != nil {
		fmt.Println("校验失败,err", err)
		return err
	}
	// 设置最大连接数
	global.DB.SetMaxOpenConns(50)
	// 设置最大的空闲连接数
	global.DB.SetMaxIdleConns(20)
	fmt.Println("连接数据库成功！")
	return nil
}
